home *** CD-ROM | disk | FTP | other *** search
- (*===========================================================================*)
- (* Window initialize/close *)
- (* *)
- (* Copyright 1988, 1989, 1991 by H. Roy Engehausen. All rights reserved. *)
- (* This software may be freely distributed and used, but it may not *)
- (* under any circumstances be sold by anyone other than the author. *)
- (* It may be distributed by a commercial company as long as it is *)
- (* for no cost. *)
- (* *)
- (*===========================================================================*)
-
- (*===========================================================================*)
- (* Window initialize *)
- (*===========================================================================*)
-
- PROCEDURE window_init;
-
- VAR
- i : INTEGER;
- regs : REGISTERS;
- size_bot : BYTE;
- size_screen : BYTE;
- size_top : BYTE;
- w : window_data_ptr;
-
- BEGIN;
-
- (*-----------------------------------------------------------------------*)
- (* Initialize things *)
- (*-----------------------------------------------------------------------*)
-
- WITH opt_block DO
- BEGIN;
- DIRECTVIDEO := opt_direct_display;
- CHECKSNOW := opt_direct_snow;
- END;
-
- color(0);
-
- CLRSCR;
-
- (*-----------------------------------------------------------------------*)
- (* Figure out the sizes *)
- (*-----------------------------------------------------------------------*)
-
- WITH regs DO
- BEGIN;
- AX := $1130; (* Information request code *)
- BX := $0;
- DX := 24; (* Pre-seed "answer" with value for old iron. *)
- INTR($10, regs); (* Video interrupt. *)
- size_screen := DL + 1;
- END;
-
- i := size_screen - 2; (* -2 for status line and input line *)
-
- size_top := (i * opt_block.window_percent) div 100;
- size_bot := i - size_top;
-
- (*-----------------------------------------------------------------------*)
- (* Get cursor data and set the block cursor *)
- (*-----------------------------------------------------------------------*)
-
- WITH regs DO
- BEGIN;
- AX := $0300;
- BX := $0;
- INTR($10, regs);
- window_cursor_orig := CX;
- END;
-
- i := window_cursor_orig AND $1F1F;
-
- CASE i OF
- $0B0C : window_cursor_block := $040C;
- $0607 : window_cursor_block := $0307;
- ELSE
- BEGIN;
- WRITELN('Cursor?');
- WRITELN('H', HI(window_cursor_orig));
- WRITELN('L', LO(window_cursor_orig));
- DELAY(5000);
- i := i AND $1F;
- window_cursor_block := $0300 + i;
- END;
- END;
-
- window_cursor_block := (window_cursor_orig AND $60) OR window_cursor_block;
-
- (*-----------------------------------------------------------------------*)
- (* Initialize window locations *)
- (*-----------------------------------------------------------------------*)
-
- FILLCHAR(window_location, SIZEOF(window_location), CHR(0));
-
- WITH window_location[0] DO (* Full Screen Window *)
- BEGIN;
- window_u_y := HI(WINDMIN) + 1;
- window_l_y := HI(WINDMAX) + 1;
- window_wl := HI(WINDMAX) + 1;
- END;
-
- WITH window_location[1] DO (* Top window *)
- BEGIN;
- window_u_y := 1;
- window_l_y := window_location[1].window_u_y + size_top - 1;
- window_wl := size_top;
- END;
-
- WITH window_location[2] DO (* Bottom window *)
- BEGIN;
- window_u_y := window_location[1].window_l_y + 2;
- window_l_y := window_location[2].window_u_y + size_bot - 1;
- window_wl := size_bot;
- END;
-
- (*-----------------------------------------------------------------------*)
- (* Initialize windows *)
- (*-----------------------------------------------------------------------*)
-
- FILLCHAR(window_array, SIZEOF(window_array), CHR(0));
-
- FOR i := 0 TO 3 DO
- WITH window_array[i] DO
- BEGIN;
- NEW(w);
- WITH w^ DO
- BEGIN;
- last_line := NIL;
- next_line := NIL;
- this_line := '';
- line_color := invisible_color;
- END;
- window_data := w;
- window_count := 0;
- window_line := w;
- window_last := w;
- END;
-
- WITH window_array[0] DO (* Full Screen Window *)
- BEGIN;
- window_act := TRUE;
- window_cursor := 1;
- window_loc := window_full_screen;
- window_max_data := 50;
- window_at_top := FALSE;
- window_scrollable := FALSE;
- END;
-
- WITH window_array[1] DO (*Connect window *)
- BEGIN;
- window_act := TRUE;
- window_cursor := 1;
- window_loc := window_top_screen;
- window_max_data := opt_block.scroll_conn;
- window_at_top := TRUE;
- window_scrollable := TRUE;
- END;
-
- WITH window_array[2] DO (* Monitor window *)
- BEGIN;
- window_act := TRUE;
- window_cursor := 1;
- window_loc := window_bottom_screen;
- window_max_data := opt_block.scroll_mon;
- window_at_top := TRUE;
- window_scrollable := TRUE;
- END;
-
- WITH window_array[3] DO (* Operator window *)
- BEGIN;
- window_act := FALSE;
- window_cursor := 1;
- window_loc := window_bottom_screen;
- window_max_data := opt_block.scroll_opr;
- window_at_top := TRUE;
- window_scrollable := TRUE;
- END;
-
- (*-----------------------------------------------------------------------*)
- (* Initialize screen *)
- (*-----------------------------------------------------------------------*)
-
- CLRSCR;
- GOTOXY(1,window_location[window_top_screen].window_l_y + 1);
- color(opt_block.status_color);
- WRITE(' ');
- WRITE(' '); (* -1 to prevent scroll *)
- GOTOXY(1,window_location[window_bottom_screen].window_l_y + 1);
- WRITE(' ');
- WRITE(' '); (* -1 to prevent scroll *)
- GOTOXY(1,window_location[window_bottom_screen].window_l_y + 1);
-
- current_window := window_reset;
-
- END;
-
- (*===========================================================================*)
- (* Window close *)
- (*===========================================================================*)
-
- PROCEDURE window_close;
- BEGIN;
-
- window_select(window_reset);
-
- TEXTBACKGROUND(0);
- TEXTCOLOR(7);
-
- WRITELN;
-
- END;